As an increasing number of applications and services are being made available over networks such as the Internet, an increasing number of content, application, and/or service providers are turning to technologies such as remote resource sharing and cloud computing. Cloud computing, in general, is an approach to providing access to electronic resources through services, such as Web services, where the hardware and/or software used to support those services is dynamically scalable to meet the needs of the services at any given time. A user or customer typically will rent, lease, or otherwise pay for access to resources through the cloud, and thus does not have to purchase and maintain the hardware and/or software to provide access to these resources.
In some environments, multiple users can share resources such as remote servers and data repositories, wherein the users can concurrently send multiple requests to be executed against the same resource. Problems can arise, however, since there is a limited amount of capacity for each type of resource. Conventional systems address these problems by providing dedicated resources to users and/or purchasing additional capacity, but such approaches are expensive and often result in unused excess capacity. Further, each resource can have more than one type of capacity, such as a compute capacity, a throughput limit, an available bandwidth, and other such aspects. Since conventional systems do not optimize the usage of various types of resource capacity for shared resources, there often is excess capacity in one or more of these capacity types even if one or more other types of capacity are being substantially fully utilized.